package a

import (
	"reflect"
	"strings"
)

// FieldMeta 表示字段元信息
type FieldMeta struct {
	A名称        string `json:"名称"`
	JSONName   string `json:"jsonName"`
	ColumnName string `json:"columnName"`
	A备注        string `json:"备注"`
	// 可以根据需要添加更多属性，如字段类型等
}

// StructMeta 表示结构体的元信息
type StructMeta struct {
	Fields []FieldMeta `json:"fields"`
}

// GetStructMeta 通用函数，获取任意结构体的元信息
func GetStructMeta(s interface{}) StructMeta {
	t := reflect.TypeOf(s)
	if t.Kind() == reflect.Ptr {
		t = t.Elem()
	}
	var fields []FieldMeta

	for i := 0; i < t.NumField(); i++ {
		field := t.Field(i)
		jsonName := field.Tag.Get("json")
		columnName := field.Tag.Get("gorm")
		备注 := field.Tag.Get("备注")

		// 提取列名，假设 gorm 标签格式为 "column:xxx;备注:xxx"
		var actualColumnName string
		if columnName != "" {
			parts := strings.Split(columnName, ";")
			for _, part := range parts {
				if strings.HasPrefix(part, "column:") {
					actualColumnName = strings.TrimPrefix(part, "column:")
					break
				}
			}
		}

		fields = append(fields, FieldMeta{
			A名称:        field.Name,
			JSONName:   jsonName,
			ColumnName: actualColumnName,
			A备注:        备注,
		})
	}

	return StructMeta{Fields: fields}
}
